package DEMO;
//两个线程执行的自增方法一个加了锁，一个没有加锁
//使用同一个对象，对象中有两个自增方法，两个自增方法中定义一个锁对象
public class demo_7 {
    public static void main(String[] args) throws InterruptedException {
        Counter7 counter=new Counter7();
        Thread  thread1=new Thread(()->{
            for (int i = 0; i <5_0000 ; i++) {
                counter.increase();
            }
        });
        Thread thread2 =new Thread(()->{
            for (int i = 0; i <5_0000 ; i++) {
                counter.increase1();
            }
        });
        //启动线程
        thread1.start();
        thread2.start();
        //等待线程执行完成
        thread1.join();
        thread2.join();
        System.out.println("count= "+counter.count);
        //结果正确说明一个问题，当多个线程执行不同的代码块的时候，只要两个代码块使用的是同一个锁对象，仍然会产生锁竞争
    }
}
class Counter7{
    public int count=0;
    //一个方法加锁了，一个方法没有加锁
    Object lo_ker=new Object();
    public void increase(){
        synchronized(lo_ker){
            count++;
        }
    }
    public void increase1(){
        synchronized(lo_ker){
            count++;
        }
    }
}
